package com.example.demo.util;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.util.List;
import java.util.Map;

public class JsonUtil {
    /**
     * gson对象
     */
    private static Gson gson;

    static {
        gson = new Gson();
    }

    /***
     * 将对象转换成相对应的字符串
     *
     * @return json字符串
     */
    public static String toJsonFromBean(Object obj) {
        return gson.toJson(obj);
    }

    /***
     * 将list集合转换成相对应的字符串
     *
     * @param lists
     *            需要转换的list集合
     * @return
     */
    public static <T> String toJsonFromList(List<T> lists) {
        TypeToken<List<T>> type = new TypeToken<List<T>>() {
        };
        return gson.toJson(lists, type.getType());
    }

    /**
     * 将map集合转换成相对应的字符串
     *
     * @param map
     * @return
     */
    public static <T> String toJsonFromMap(Map<String, T> map) {
        TypeToken<Map<String, T>> type = new TypeToken<Map<String, T>>() {
        };
        return gson.toJson(map, type.getType());
    }

    /**
     * 将list<map<>>集合转换成相对应的字符串
     *
     * @param listMaps
     * @return
     */
    public static <T> String toJsonFromListMap(List<Map<String, T>> listMaps) {
        TypeToken<List<Map<String, T>>> type = new TypeToken<List<Map<String, T>>>() {
        };
        return gson.toJson(listMaps, type.getType());
    }

    /**
     * 将json转换成对象
     *
     * @param result
     * @param clz
     * @return
     */
    public static <T> T fromJsontoBean(String result, Class clz) {
        return (T) gson.fromJson(result, clz);
    }

    /**
     * 将json转换成list
     *
     * @param result
     * @return
     */
    public static <T> List<T> fromJsonToList(String result) {
        TypeToken<List<T>> type = new TypeToken<List<T>>() {
        };
        return gson.fromJson(result, type.getType());
    }

    /***
     * 将json转换成map
     *
     * @param result
     * @return
     */
    public static <T> Map<String, T> fromJsonToMap(String result) {
        TypeToken<Map<String, T>> type = new TypeToken<Map<String, T>>() {
        };
        return gson.fromJson(result, type.getType());
    }

    /**
     * 将json转换成list<map<>>
     *
     * @param result
     * @return
     */
    public static <T> List<Map<String, T>> fromJsonToListMap(String result) {
        TypeToken<List<Map<String, T>>> type = new TypeToken<List<Map<String, T>>>() {
        };
        return gson.fromJson(result, type.getType());
    }

}